# 导包
import time

import selenium.common.exceptions
from selenium import webdriver
from selenium.webdriver.common.by import By
from pprint import pprint


# TODO 封装函数
class TestCase:
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.get('https://www.baidu.com')

    # 通过ID定位元素
    def id(self):
        kw = self.driver.find_element(By.ID, 'kw')
        print(kw.get_attribute('outerHTML'))

        su = self.driver.find_element(By.ID, 'su')
        print(su.get_attribute('outerHTML'))

    # 通过标签的class属性定位元素
    def class_name(self):
        s_ipt = self.driver.find_element(By.CLASS_NAME, 's_ipt')
        print(s_ipt.get_attribute('outerHTML'))

    # 通过链接文本定位元素
    def link_text(self):
        news = self.driver.find_element(By.LINK_TEXT, '新闻')
        print(news.get_attribute('outerHTML'))

    # 通过部分链接文本定位元素
    def partial_link_text(self):
        hao123 = self.driver.find_element(By.PARTIAL_LINK_TEXT, 'hao')
        print(hao123.get_attribute('outerHTML'))

    # 通过标签名称定位元素
    def tag_name(self):
        ipt = self.driver.find_element(By.TAG_NAME, 'input')  # 定位到的是页面第一个input标签
        print(ipt.get_attribute('outerHTML'))

        ipts = self.driver.find_elements(By.TAG_NAME, 'input')  # 定位到的是页面中所有的input标签,返回一个列表,需遍历查看
        pprint(ipts)
        print(len(ipts))
        print(ipts[7].get_attribute('outerHTML'))

    # 通过name属性定位元素
    def name(self):
        ie = self.driver.find_element(By.NAME, 'wd')
        print(ie.get_attribute('outerHTML'))

    # 匹配不到会抛出异常
    # def about_error(self):
    # driver.find_element()
    # self.driver.find_element(By.ID, 'abc')
    # selenium.common.exceptions.NoSuchElementException
    # driver.find_elements

    def quit(self):
        time.sleep(2)
        self.driver.quit()


# TODO 函数调用
if __name__ == '__main__':
    case = TestCase()
    case.id()
    case.class_name()
    case.link_text()
    case.partial_link_text()
    case.name()
    # case.about_error()
    case.quit()
